package com.caregiver.watch.business.user.utils.reminder;


import com.caregiver.watch.business.user.enums.WeekDay;

import java.util.HashSet;
import java.util.Set;

/**
 * 周期掩码工具类
 */
public final class RepeatDaysMaskUtil {

    /**
     * 将星期集合转换为掩码值
     *
     * @param days 星期集合
     * @return 掩码值
     */
    public static int toMaskValue(Set<WeekDay> days) {
        int mask = 0;
        for (WeekDay day : days) {
            mask |= day.getValue();
        }
        return mask;
    }

    /**
     * 将掩码值转换为星期集合
     *
     * @param mask 掩码值
     * @return 星期集合
     */
    public static Set<WeekDay> fromMaskValue(int mask) {
        Set<WeekDay> days = new HashSet<>();
        for (WeekDay day : WeekDay.values()) {
            if ((mask & day.getValue()) != 0) {
                days.add(day);
            }
        }
        return days;
    }

    /**
     * 检查掩码值是否包含指定星期
     *
     * @param mask 掩码值
     * @param day  星期
     * @return 是否包含
     */
    public static boolean contains(int mask, WeekDay day) {
        return (mask & day.getValue()) != 0;
    }

    /**
     * 添加星期到掩码值
     *
     * @param mask 掩码值
     * @param day  星期
     * @return 新的掩码值
     */
    public static int addDay(int mask, WeekDay day) {
        return mask | day.getValue();
    }

    /**
     * 从掩码值中移除星期
     *
     * @param mask 掩码值
     * @param day  星期
     * @return 新的掩码值
     */
    public static int removeDay(int mask, WeekDay day) {
        return mask & ~day.getValue();
    }
}
